package com.xbongbong.paas.help;

import com.xbongbong.paas.constant.MessageConstant;
import com.xbongbong.paas.domain.entity.ext.PaasFormEntityExt;
import com.xbongbong.paas.model.PaasFormModel;
import com.xbongbong.paas.redis.PaasRedisHelper;
import com.xbongbong.paas.redis.RedisPrefixConstant;
import com.xbongbong.paas.redis.RedisTimeConstant;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.pro.enums.errorcodes.SystemErrorCodeEnum;
import com.xbongbong.saas.constant.StringConstant;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Objects;

/**
 *
 * ERROR：不要在这里加其他方法
 * @author 吴峰
 * @date 2021/08/02 20:51
 */
@Component
public class DistributorMarkHelp {

    @Resource
    private PaasRedisHelper paasRedisHelper;
    @Resource
    private PaasFormModel paasFormModel;

    /**
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     * ERROR：不要在这里加其他方法
     */

    /**
     * 获取标识
     * @param formId
     * @param corpid
     * @return
     * @throws XbbException
     */
    public Integer getDistributorMark(Long formId, String corpid) throws XbbException {
        String key = corpid + StringConstant.UNDER_LINE + formId;
        String redisValue = paasRedisHelper.getValue(RedisPrefixConstant.DISTRIBUTOR_MARK, key);
        if (Objects.isNull(redisValue)) {
            PaasFormEntityExt paasFormEntityExt = paasFormModel.getByKey(formId, corpid);
            if (Objects.isNull(paasFormEntityExt)) {
                throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001, MessageConstant.FORM_NOT_EXIST);
            }
            paasRedisHelper.setValue(RedisPrefixConstant.DISTRIBUTOR_MARK, key , paasFormEntityExt.getDistributorMark().toString(), RedisTimeConstant.HOUR_DURATION);
            return paasFormEntityExt.getDistributorMark();
        }
        return Integer.valueOf(redisValue);
    }
}
